查看原文
其他

TACO:开源最大规模、面向复杂任务的代码生成训练数据集与评测基准

智源研究院 智源研究院 2024-01-06
研究背景
代码能力是基础模型的核心能力之一,对于提升基础模型的推理、规划等关键技能至关重要。随着大型语言模型和代码生成模型的迅速发展,主流的代码评测基准已经显现出它们的局限性,难以全面反映模型在真实场景下的表现和潜力。
1. 评测任务难度低,无法全面评测模型的能力
当前主流的 HumanEval/HumanEval-X,MBPP/MBXP 评测集主要关注基础编程问题,通过代码补全或 Text2Code任务,要求模型完成某个函数功能,而非解决一个真实场景的问题。此外,各评测基准上的模型表现均已达到较高的分值,如 HumanEval的 SOTA 模型表现为94.4(pass@1),MBPP的 SOTA模型表现为 81.1(Acc),评测结果的参考价值逐渐降低[1]。
2. 测试集质量存在问题,有效性存疑
代码执行和测试用例是检验代码是否正确的关键,而APPS、CodeContest评测基准还存在测试集无人工答案、问题和答案集合未去重等问题。此外,DeepMind发表论文《Competition-Level Code Generation with AlphaCode》指出,由于测试用例的不足,代码评测数据集会出现 False Positive的问题,即测试用例全部通过,但经过人工检查发现代码实现不正确,模型仅仅恰好通过了给定的几个测试用例。
3. 缺乏细粒度指标
当前代码评测数据集对于编码能力评测缺乏更细粒度的指标,如在难度维度上、算法维度上(排序、动态规划等),无法对提升模型代码生成能力提供针对性指导。
因此,我们需要一个更具挑战、更高质量、更细粒度的代码生成评测方案,用于评价模型的代码生成能力,同时为提升代码生成能力提供指导。
TACO:更具挑战性的代码生成训练数据集与评测基准
TACO(Topics in Algorithmic COde generation dataset)是一个专注于算法的代码生成数据集,旨在为代码生成模型领域提供一个更具挑战性的训练数据集与评测基准。该数据集包含难度更大、更接近真实编程场景的编程竞赛题目,强调提升或评测模型在实际应用场景中对问题的理解和推理(Reasoning)能力,而不仅仅是实现既定的函数功能。
  • 规模更大:TACO 包括训练集(25443道题目)和测试集(1000道题目),是当前规模最大的代码生成数据集。
  • 质量更高:TACO 数据集中的每个题目都尽可能匹配多样化的解题答案,答案规模高达155万条,确保训练时模型不易过拟合以及评测结果的有效性。
  • 提供细粒度标签:TACO数据集中每个题目均包含任务主题、算法、技能及难度等细粒度标签,为代码生成模型的训练与评测更精确的参考。

与当前主流代码评测基准相比,TACO 在数据规模、数据质量、细粒度评测方案上具有明显优势:
经实验,当前流行的代码生成模型在 TACO 评测中与 GPT-4 存在显著差异,表明这一领域仍有巨大的提升空间。TACO数据集不仅提供了一个挑战性的测试方法,还能作为研究和改进模型性能的训练数据。我们欢迎各个模型研究团队利用 TACO 数据集来训练和评测他们的模型,并在社区中分享经验和成果。希望通过社区的共同努力,能够激发更多创新的解决方案,进一步推动代码生成领域的发展。
↓ TACO 开源地址
  • 论文:https://arxiv.org/abs/2312.14852
  • 智源开放数据仓库:https://data.baai.ac.cn/details/BAAI-TACO
  • GitHub: https://github.com/FlagOpen/TACO
  • Hugging Face: https://huggingface.co/datasets/BAAI/TACO
1. 更高的数据质量
首先在问题质量上,TACO采用了难度更大、更贴近真实编程场景的编程竞赛应用题,即给定一个实际的应用场景,考察模型对问题的理解和推理(Reasoning)能力。模型首先需要根据输入内容理解“待解决的问题是什么”,然后将问题抽象成一个编程问题,最后找到解决方案并输出可正确执行的代码。模型在此过程需要对输入内容进行理解和推理,最后利用模型自身具备的算法和数据结构知识来实现算法功能。
而当前应用广泛的HumanEval和MBPP评测基准仅覆盖基础的编程语言知识,任务本身过于简单,输入的参考代码均为自包含的单一函数;并且输入的问题已经被抽象成一个基础编程问题,模型只需考虑“实现算法功能”,如,完成函数实现功能“判断给定的数组中是否有两个数字差值小于给定的阈值”。
TACO 数据集中编程应用题输入样例
其次在答案质量上,TACO 测试集经过严格校对,每个问题至少需要一个经过人工校验的答案,以保证测试集的问题可解;同时,保证在正确的代码上测试用例可以全部通过,以免出现评测过程中,模型正确生成代码但无法通过测试用例的情况。
如下图所示,经统计 APPS、CodeContent 测试集均存在25%左右的问题无人工校验的答案。另外,据 DeepMind 发表的论文显示[2], “测试用例/问题(Tests/Problem)” 比例大于 200 时,False Positive 问题会显著减轻,可以更好地保证测试结果的有效性,而TACO 测试集的“测试用例/问题(Tests/Problem)” 比例为 202.3。
TACO 测试集与其他评测基准的比较
而在训练集方面,TACO 训练集每个问题都具备多样化的答案,使模型不易在训练集上过拟合。
训练集和测试集的“问题-答案”对的数量
2. 更丰富的数据来源,更大的数据规模
TACO 拓展了新的竞赛应用题来源,分为训练集(25443道题目)和测试集(1000道题目),是当前规模最大的代码生成数据集。与采用了大量竞赛应用题的评测基准 APPS、 CodeContent 相比,TACO 增加了 29.5% 以上的新题与答案。
TACO 数据来源
3. 细粒度的数据标签和评测方案:
TACO 的细粒度标签包含四大维度:1)任务主题,2)算法标签,3)编程技能,4)难度等级。
维度一:任务主题
根据Source Programming Problems定义的 968类代码任务主题,这些任务主题主要包含领域专家的人工标注、问题的主题(如数学、集合、图形、字符串)、答案包含的主题(如动态规划、二值搜索)等.
维度二:算法标签
根据可用性分析,考虑覆盖范围(编程技能、算法设计方法)、泛化性和特殊性的平衡、标签质量,我们保留了36个算法标签,分布如图:
维度三:编程技能
在评测维度上,我们期望给出细粒度能力指标,并指导模型训练,参考Competitive Programmer's Handbook[3],我们将 36个算法标签映射到8个编程技能上。
各编程技能对应题目数量
维度三:难度等级
TACO 设置 Easy ~ Very_Hard 5个难度等级,其中测试集所有题目均有难度等级标签。
各难度等级对应题目数量
评测实验
我们用 TACO 测试集和训练集在GPT-4及经过大量代码数据训练的代码生成模型进行实验,结果显示:
  • TACO 测试集具备较高挑战性,GPT-4在 easy 等级 pass@1 得分仅 31.5。除 GPT-4 以外,各代码模型在5个难度等级的 pass@1 得分基本低于 10,pass@100得分甚至也不及 GPT-4 pass@1。

  • 利用具备细粒度标签的TACO训练集可以针对性提升代码生成模型的性能。例如,starcoder-1b 在使用 TACO 训练集在特定技能上微调后,性能有了明显提升。
GPT-4与其他代码生成模型在各难度等级上的评测结果
GPT-4 和 starcoder-1b 微调模型在各编程技能上的评测结果
general_LoRA:使用全部训练集进行LoRA微调
skill_LoRA:使用特定技能的训练集进行LoRA微调,得到8个不同的skill模型
注释:
[1] paperwithcode:https://paperswithcode.com/sota/code-generation-on-humaneval,https://paperswithcode.com/sota/code-generation-on-mbpp
[2] Li Y, Choi D, Chung J, et al. Competition-level code generation with alphacode[J]. Science, 2022, 378(6624): 1092-1097.
[3] Laaksonen A. Competitive programmer’s handbook[J]. Preprint, 2017, 5.


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存